package com.zte.cl.service;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.zte.cl.model.News;

/**
 * 等待抓取的文章队列
 * 
 * @author Administrator
 * 
 */
public class NewsQueue {
	private static final Log log = LogFactory.getLog(NewsQueue.class);

	static {
		queue = new LinkedBlockingQueue<News>();
	}

	private static BlockingQueue<News> queue;

	public static void push(News news) {
		try {
			/* 3种入队方法
			 *  1.add 添加元素的时候，若超出了度列的长度会直接抛出异常
			 *  2.offer 添加元素时，如果发现队列已满无法添加的话，会直接返回false
			 *  3.put 向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间，以加入元素
			 */
			queue.put(news);
		} catch (InterruptedException e) {
			log.error("入队时被打断", e);
		}
	}

	public static News poll() {
		/* 3种出队方法
		 * 1.poll 队列为空，返回null
		 * 2.remove 队列为空，抛出NoSuchElementException异常
		 * 3.take 队列为空，发生阻塞，等待有元素
		 */
		return queue.poll();
	}
}
